# 通过进程号管理进程
# 获取当前进程 os.getpid()
# 获取当前进程 multiprocessing.current_process().pid
# 获取当前进程父进程pid os.getppid()
# os.kill(os.getpid(), 9) # 强制尽快的杀死进程

import time
import multiprocessing
import os


import time
import multiprocessing

def coding(name, num):
    for i in range(num):
        print(f'{name}第{i}行代码')
        time.sleep(0.2)

    print(f'coding: pid:{os.getpid()}, {multiprocessing.current_process().pid}, 父进程{os.getppid()}')


def music(name, num):
    for i in range(num):
        print(f'{name}第{i}首音乐')
        time.sleep(0.2)

    print(f'music: pid:{os.getpid()}, {multiprocessing.current_process().pid}, 父进程{os.getppid()}')


if __name__ == '__main__':
    # 注意: 多进程的代码必须要写到 "if __name__ == '__main__'"中!!!

    # 1 创建进程对象
    t1 = time.time()
    p1 = multiprocessing.Process(target=coding, name='p1', args=('小明', 3))
    p2 = multiprocessing.Process(target=music, name='p2', kwargs={'name':'小张','num':6 })

    print(f'主进程pid:{os.getpid()}, {multiprocessing.current_process().pid}, 父进程{os.getppid()}')
    # 2 启动子进程
    p1.start()
    p2.start()

    # 2-2 设置让主进程等待子进程完成任务后,在向下运行
    p1.join()  # 让主进程等待p1完成任务 在向下运行;相当于有把主进程给阻塞
    p2.join()  # 让主进程等待p2完成任务 在向下运行;相当于有把主进程给阻塞

    # 3 计算时间
    t2 = time.time()
    print(f'用时{t2 - t1}')


